package com.cloud.jdkTest;

/**
 * 在JDK1.7及之后，字符串常量池中不仅可以存放String实例，
 * 同时还能存放指向Java堆中某个String实例的引用。
 * 在使用String.intern方法时，若字符串常量池中有满足String.equals方法的String对象，
 * 则返回其引用，这一点和JDK1.6相同；若字符串常量池中没有相同的String对象，
 * 则当前String对象为堆上对象，故在字符串常量池中存放一个指向堆上此String对象的引用，并返回此引用。
 */
public class StringTableTest {
    public static void main(String[] args) {
        //此处会导致串池中创建一个"ab"
        String str = new String("ab");
        String str1 = str.intern();
        String str0 = "ab";

        String str2 = new String("shu") + new String("chuan");
        //这是jdk1.7及以后的情况
        //此时串池中还没有shuchuan，故将其放入串池后返回
        String str3 = str2.intern();
        System.out.println(str == str0);
        System.out.println(str == str1);
        System.out.println(str0 == str1);
        System.out.println(str2 == str3);
    }
}
